#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>

const QString SERVER_IP = "127.0.0.1";
const quint16 SERVER_PORT = 8080;

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 窗口标题
    this->setWindowTitle("客户端");
    // 初始化客户端
    socket = new QTcpSocket(this);
    // 与服务端建立连接，发起三次握手
    socket->connectToHost(SERVER_IP, SERVER_PORT);
    // 连接信号槽，接受服务端的响应
    connect(socket, &QTcpSocket::readyRead, this, [=](){
        // 有服务端数据到来的时候读取数据
        QString responseData = socket->readAll();
        // 将数据显示到客户端的列表框日志中
        ui->listWidget->addItem("服务端说：" + responseData);
    });
    // 阻塞等待连接成功
    bool ret = socket->waitForConnected();
    if(!ret)
    {
        // 建立连接失败
        QMessageBox::critical(this, "客户端出错", socket->errorString());
        return;
    }
    // 连接成功，可以发送数据了
    QString log = "[" + SERVER_IP + ":" + QString::number(SERVER_PORT) + "] 连接成功！";
    ui->listWidget->addItem(log);
}


Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_clicked()
{
    // 点击发送按钮，发送输入框的数据
    // 首先获取输入框中的数据
    const QString& data = ui->lineEdit->text();
    // 构建请求，发送至服务端
    socket->write(data.toUtf8());
    // 把请求显示日志
    ui->listWidget->addItem("客户端说：" + data);
    // 清空客户端的输入框中的数据
    ui->lineEdit->clear();
}
